﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DataAccessObject
{
    public partial class BANLOPHOC : IDataErrorInfo
    {

        public string Error
        {
            get { throw new NotImplementedException(); }
        }

        public string this[string columnName]
        {
            get 
            {
                if (columnName == "TenBan")
                {
                    if (this.TenBan == null || this.TenBan.Length < 3)
                    {
                        return "*Tên ban học phải lớn hơn 3 kí tự";
                    }
                }
                return string.Empty;
            }
        }
    }

    public partial class HOCSINH : IDataErrorInfo
    {
        public void copyData(HOCSINH hocsinh)
        {
            base.copyData(hocsinh);
            NguoiBaoHo = hocsinh.NguoiBaoHo;
            MaHocSinh = hocsinh.MaHocSinh;
            NgayNhapHoc = hocsinh.NgayNhapHoc;
            NgayNghiHoc = hocsinh.NgayNghiHoc;
        }

        public string this[string columnName]
        {
            get
            {
                return getError(columnName);
            }
        }

        public virtual string getError(string columnName)
        {
            string result = base.getError(columnName);
            switch (columnName)
            {
                case "MaHocSinh":
                    if (this.MaHocSinh == "" || this.MaHocSinh == null)
                    {
                        result += "*Không được để trống mã học sinh \n";
                    }
                    else
                    {
                        if (MaHocSinh.Length > 15 || MaHocSinh.Length < 5)
                        {
                            result += "*Mã học sinh phải nhỏ hơn 15 kí từ và lớn hơn 5 kí tự \n";
                        }
                    }
                    break;
                case "NguoiBaoHo":
                    if (this.NguoiBaoHo == "" || this.NguoiBaoHo == null)
                    {
                        result += "*Không được để trống người bảo hộ \n";
                    }
                    break;
                case "NgaySinh":
                    if (NgaySinh == null) result += "*Không được bỏ trống ngày sinh\n";
                    break;
                case "NgayNhapHoc":
                    if (NgaySinh != null)
                        if (this._NgayNhapHoc == null)
                        {
                            result += "*Không được bỏ trống ngày nhập học\n";
                        }
                    break;
                case "NgayNghiHoc":
                    if (NgayNghiHoc != null)
                        if (NgayNghiHoc < NgayNhapHoc)
                            result += "*Ngày nghỉ hoc phải lớn hơn ngày nhập học\n";
                    break;
            }
            return result;
        }
    }

    public partial class GIAOVIEN : IDataErrorInfo
    {
        public void copyData(GIAOVIEN giaovien)
        {
            base.copyData(giaovien);
            MaGiaoVien = giaovien.MaGiaoVien;
            NgayVaoLam = giaovien.NgayVaoLam;
            NgayNghiViec = giaovien.NgayNghiViec;
            CMND = giaovien.CMND;
        }

        public virtual string Error
        {
            get { return null; }
        }

        public string this[string columnName]
        {
            get
            {
                return getError(columnName);
            }
        }

        public virtual string getError(string columnName)
        {
            string result = base.getError(columnName);
            switch (columnName)
            {
                case "MaGiaoVien":
                    if (this.MaGiaoVien == "" || this.MaGiaoVien == null)
                    {
                        result += "*Không được để trống mã giáo viên \n";
                    }
                    else
                    {
                        if (MaGiaoVien.Length > 15 || MaGiaoVien.Length < 5)
                        {
                            result += "*Mã giáo viên phải nhỏ hơn 15 kí từ và lớn hơn 5 kí tự \n";
                        }
                    }
                    break;
                case "CMND":
                    if (this.CMND == "" || this.CMND== null)
                    {
                        result += "*Không được để trống chứng minh nhân dân \n";
                    }
                    else
                    {
                        if (CMND.Length > 15 || CMND.Length < 5)
                        {
                            result += "*Chứng minh nhân dân phải nhỏ hơn 15 kí từ và lớn hơn 5 kí tự \n";
                        }
                    }
                    break; 
                case "NgaySinh":
                    if (NgaySinh == null) result += "*Không được bỏ trống ngày sinh\n";
                    OnPropertyChanged("NgayVaoLam");
                    break;
                case "NgayVaoLam":
                    if (NgaySinh != null)
                    if (this.NgayVaoLam.Year - this.NgaySinh.Year < 18) 
                    {
                        result += "*Tuổi quá nhỏ, không thể tham gia công việc. \n *Độ tuổi tham gia công việc là 18";
                    }
                    break;
                case "NgayNghiViec":
                    if (NgayNghiViec != null)
                        if (NgayNghiViec < NgayVaoLam)
                            result += "*Ngày nghỉ việc phải lớn hơn ngày vào làm\n";
                        break;
            }
            return result;
        }
    }

    public partial class USER : IDataErrorInfo
    {
        public virtual void copyData(USER user)
        {
            UserName = user.UserName;
            Password = user.Password;
            HoTen = user.HoTen;
            NgaySinh = user.NgaySinh;
            DiaChi = user.DiaChi;
            QueQuan = user.QueQuan;
            GioiTinh = user.GioiTinh;
        }
        public virtual string Error
        {
            get { throw new NotImplementedException(); }
        }

        public virtual string this[string columnName]
        {
            get
            {
                return getError(columnName);
            }
        }

        public virtual string getError(string columnName)
        {
            string result = "";
            switch (columnName)
            {
                case "HoTen":
                    if (this.HoTen == "" || this.HoTen == null)
                    {
                        result += "\n Không được để trống họ tên";
                    }
                    else
                    {
                        if (HoTen.Length > 100 || HoTen.Length < 3)
                        {
                            result += "\nHọ tên phải nhỏ hơn 15 kí từ và lớn hơn 5 kí tự";
                        }
                    }
                    break;
                case "QueQuan":
                    if (this.QueQuan == "" || this.QueQuan == null)
                    {
                        result += "\n Không được để trống quê quán";
                    }
                    else
                    {
                        if (QueQuan.Length > 100 || QueQuan.Length < 3)
                        {
                            result += "\nQuê quá phải nhỏ hơn 100 kí từ và lớn hơn 3 kí tự";
                        }
                    }
                    break;
                case "DiaChi":
                    if (this.DiaChi == "" || this.DiaChi == null)
                    {
                        result += "\n Không được để trống địa chỉ";
                    }
                    else
                    {
                        if (DiaChi.Length > 100 || DiaChi.Length < 3)
                        {
                            result += "\nĐịa chỉ phải nhỏ hơn 100 kí từ và lớn hơn 3 kí tự";
                        }
                    }
                    break;
            }
            return result;
        }
    }

    public partial class LOPHOC : IDataErrorInfo
    {

        public string Error
        {
            get { throw new NotImplementedException(); }
        }

        public string this[string columnName]
        {
            get
            {
                string result = string.Empty;
                switch (columnName)
                {
                    case "TenLopHoc":
                        if (this.TenLopHoc == null || this.TenLopHoc == "")
                            result += "*Không được bỏ trống tên lớp học\n";
                        break;
                }
                return result;
            }
        }
    }
}
